#include <iostream>
#include<string>

#define MAX 1000

using namespace std;

struct Person {
    string m_Name;
    int m_Sex;
    int m_Age;
    string m_Phone;
    string m_Addr;
};

struct AddressBooks{
    struct Person personArray[MAX];
    int m_Size;
};

void addPerson(AddressBooks* abs){
    if(abs->m_Size == MAX){
        cout << "通讯录已满，无法添加！" << endl;
    }else{
        cout << "请输入姓名: " << endl;
        string name;
        cin >> name;
        abs->personArray[abs->m_Size].m_Name = name;

        cout << "请输入性别" << endl;
        cout << "1.男" << endl;
        cout << "2.女" << endl;
        int sex = 0;
        while(true){
            cin >> sex;
            if(sex == 1 || sex == 2){
                abs->personArray[abs->m_Size].m_Sex = sex;
                break;
            }else{
                cout << "输入信息错误，请重新输入" << endl;
            }
        }

        cout << "请输入年龄: " << endl;
        int age = 0;
        while(true){
            cin >> age;
            if(age >= 0 && age <= 150){
                abs->personArray[abs->m_Size].m_Age = age;
                break;
            }else{
                cout << "您输入的年龄有误，请重新输入" << endl;
            }
        }

        cout << "请输入联系人电话: " << endl;
        string phone;
        cin >> phone;
        abs->personArray[abs->m_Size].m_Phone = phone;

        cout << "请输入家庭住址" << endl;
        string adress;
        cin >> adress;
        abs->personArray[abs->m_Size].m_Addr = adress;

        abs->m_Size++;
        cout << "添加成功！！！" << endl;
    }
    system("pause");
    system("cls");
}

void showPerson(AddressBooks* abs){
    //判断通讯录中人数是否为0
    if(abs->m_Size == 0){
        cout << "当前的记录为空" << endl;
    }else{
        for(int i = 0 ; i < abs->m_Size ; i++){
            cout << "姓名: " << abs->personArray[i].m_Name << "\t";
            cout << "性别: " << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";
            cout << "年龄: " << abs->personArray[i].m_Age << "\t";
            cout << "电话: " << abs->personArray[i].m_Phone << "\t";
            cout << "家庭住址: " << abs->personArray[i].m_Phone << endl;
            cout << endl;
        }
    }
    system("pause");
    system("cls");
}

int isExist(AddressBooks* abs, string name){
    for(int i = 0 ; i < abs->m_Size ; i++){
        if(abs->personArray[i].m_Name == name){
            return i;
        }
    }
    return -1;
}

void deletePerson(AddressBooks* abs){
    cout << "请输入您要删除的联系人的姓名" << endl;
    string name;
    cin >> name;
    int ret = isExist(abs, name);
    if(ret != -1){
        //删除操作
        for(int i = ret ; i < abs->m_Size-1 ; i++){
            abs->personArray[i] = abs->personArray[i+1];
        }
        abs->m_Size--;
        cout << "删除成功" << endl;
    }else{
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}

void findPerson(AddressBooks* abs){
    cout << "请输入您要查找的联系人: " << endl;
    string name;
    cin >> name;
    //判断一下指定的联系人是否存在
    int ret = isExist(abs, name);
    if(ret != -1){
        cout << "姓名: " << abs->personArray[ret].m_Name << "\t";
        cout << "性别: " << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
        cout << "年龄: " << abs->personArray[ret].m_Age << "\t";
        cout << "电话: " << abs->personArray[ret].m_Phone << "\t";
        cout << "家庭住址: " << abs->personArray[ret].m_Phone << endl;
        cout << endl;
    }else {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}

void modifyPerson(AddressBooks* abs){
    cout << "请输入您要修改的联系人的姓名: " << endl;
    string name;
    cin >> name;
    int ret = isExist(abs, name);
    if(ret != -1){
        cout << "该联系人的信息为: " << endl;
        cout << "姓名: " << abs->personArray[ret].m_Name << "\t";
        cout << "性别: " << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
        cout << "年龄: " << abs->personArray[ret].m_Age << "\t";
        cout << "电话: " << abs->personArray[ret].m_Phone << "\t";
        cout << "家庭住址: " << abs->personArray[ret].m_Phone << endl;
        cout << endl;

        cout << "请输入要修改的年龄: " << endl;
        int age = 0;
        while(true){
            cin >> age;
            if(age >= 0 && age <= 150){
                abs->personArray[ret].m_Age = age;
                break;
            }else{
                cout << "您输入的年龄有误，请重新输入" << endl;
            }
        }

        cout << "请输入要修改的电话: " << endl;
        string phone;
        cin >> phone;
        abs->personArray[ret].m_Phone = phone;

        cout << "请输入要修改的地址: " << endl;
        string address;
        cin >> address;
        abs->personArray[ret].m_Addr = address;

        cout << "恭喜修改成功，修改后的信息为: " << endl;
        cout << "姓名: " << abs->personArray[ret].m_Name << "\t";
        cout << "性别: " << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
        cout << "年龄: " << abs->personArray[ret].m_Age << "\t";
        cout << "电话: " << abs->personArray[ret].m_Phone << "\t";
        cout << "家庭住址: " << abs->personArray[ret].m_Phone << endl;
        cout << endl;
    }else {
        cout << "查无此人" << endl;
    }
    system("pause");
    system("cls");
}

void cleanPerson(AddressBooks* abs){
    cout << "是否确认清空: " << endl;
    cout << "1.确认" << endl;
    cout << "0.放弃" << endl;
    int flag = 0;
    while(true){
        cin >> flag;
        if(flag == 1){
            abs->m_Size = 0;
            cout << "通讯录已清空" << endl;
            break;
        }if(flag == 0){
            cout << "放弃清空，已退出" << endl;
            break;
        }else {
            cout << "输入的选项有误，请重新输入！" << endl;
        }
    }
    system("pause");
    system("cls");
}

//显示菜单
void showMenu(){
    cout << "1.添加联系人" << endl;
    cout << "2.显示联系人" << endl;
    cout << "3.删除联系人" << endl;
    cout << "4.查找联系人" << endl;
    cout << "5.修改联系人" << endl;
    cout << "6.清空联系人" << endl;
    cout << "0.退出通讯录" << endl;
}

int main() {
    system("chcp 65001");

    AddressBooks abs;
    abs.m_Size = 0;


    //创建用户选择输入变量
    int select = 0;

    while(true){
        //菜单调用
        showMenu();

        cin >> select;

        switch(select) {
            case 1:
                addPerson(&abs);
                break;
            case 2:
                showPerson(&abs);
                break;
            case 3:
                deletePerson(&abs);
                break;
            case 4:
                findPerson(&abs);
                break;
            case 5:
                modifyPerson(&abs);
                break;
            case 6:
                cleanPerson(&abs);
                break;
            case 0:
                cout << "退出成功，欢迎下次使用" << endl;
                return 0;
            default:
                cout << "输入的参数有误，请重新输入" << endl;
                system("pause");
                system("cls");
        }
    }
}
